package com.bzkj.document.service.salesoutbound;

import com.bzkj.common.core.domain.AjaxResult;
import com.bzkj.common.core.domain.model.LoginUser;
import com.bzkj.common.core.page.TableDataInfo;
import com.bzkj.common.domain.NccRequestDTO;
import com.bzkj.document.domain.DocConfirmDTO;
import com.bzkj.document.domain.saleout.dto.SaleOutQueryDTO;

import java.util.HashMap;

/**
 * @projectName: bzkj-wms
 * @package: com.bzkj.document.service.salesoutbound.impl
 * @className: SalesOutboundService
 * @description: 销售出库单据服务层接口
 * @author: C1309
 * @createDate: 2024年12月05日
 * @version: v1.0
 */
public interface SalesOutboundService {

    /**
     * 查询销售出库单据
     *
     * @param nccRequestDTO 查询条件
     * @return 查询结果
     */
    TableDataInfo selectOutboundOrder(NccRequestDTO nccRequestDTO);

    /**
     * 销售出库单签字
     *
     * @param cgeneralhid    单据表头主键
     * @param loginUser 登录用户
     * @return 操作结果
     */
    AjaxResult signatureSalesOutBound(String cgeneralhid, LoginUser loginUser);

    /**
     * 修改销售出库单据
     *
     * @param responseBody 修改内容
     * @param loginUser    登录用户
     * @param isSign       是否跳过校验
     * @return 操作结果
     */
    AjaxResult updateSalesOutBoundOrder(HashMap<String, Object> responseBody, LoginUser loginUser, boolean isSign);

    /**
     * 确认销售出库单据
     *
     * @param docConfirmDTO 确认信息
     * @return 确认结果
     */
    AjaxResult insertSalesOutBoundOrder(DocConfirmDTO docConfirmDTO);

    /**
     * 查询本地销售出库单据
     *
     * @param saleOutQueryDTO 查询条件
     * @param pageNum         当前页
     * @param pageSize        页大小
     * @return 查询结果
     */
    TableDataInfo selectLocalSaleOutHeader(SaleOutQueryDTO saleOutQueryDTO, int pageNum, int pageSize);

    /**
     * 销售出库单据回退
     *
     * @param headerId 销售出库单表头主键
     * @param loginUser 登录用户
     * @return 操作结果
     */
    AjaxResult orderBack(String headerId, LoginUser loginUser);

    /**
     * 更新库存
     * @param headerId 销售出库单表头主键
     * @param loginUser 登录用户
     * @return 操作结果
     */
    AjaxResult updateInventory(String headerId, LoginUser loginUser);

    /**
     * 删除销售出库单据
     * @param headerId 销售出库单表头主键
     * @param loginUser 登录用户
     * @param reason 作废原因
     * @return 操作结果
     */
    AjaxResult deleteOtherOutBoundOrder(String headerId, LoginUser loginUser, String reason);
}
